


// 封装axios 
import axios from 'axios'
import {ElLoading , ElMessage } from 'element-plus'
import {router} from '@/router' 
export const baseURL = 'http://localhost:3000/'  // 服务器基路径  
export const request = axios.create({   // axios 配置项 
    timeout: 60000,  // 超时 
    baseURL: baseURL,  // 项目的基本路径 
    headers: {   // 请求头 token 
        // Authorization:'AUTH_TOKEN',
        // 'Content-Type':'application/x-www-form-urlencoded'  // 设置请求的数据格式 
    }
})
let loading:any  = null;
export const ShowLoading = (msg = '加载中...') => {
    loading && loading.close()
    loading = ElLoading.service({
        lock: true,
        text: msg,
        background: 'rgba(0, 0, 0, 0.7)',
    })
}
// 成功 
export const ShowSuccess = (msg = '成功') => {
    loading && loading.close()
    ElMessage({
        message: msg ,
        type: 'success',
    })
}

export const ShowFail = (msg = '失败') => {
    loading && loading.close()
    ElMessage.error(msg)
}

// 拦截器 
// Interceptors 拦截器   全局统一 
// 请求的拦截器   (请求发送之前做的事情)
request.interceptors.request.use(function (config:any) {

    const token = sessionStorage.getItem("yq_token") || '';
    config.headers.token = token;  // 客户端把token 通过请求头带给服务端
    // 请求成功之前
    ShowLoading()
    return config;
}, function (error) {
    // 请求失败做的事情 
    ShowFail("请求失败-网络异常")
    return Promise.reject(error);
});

// 响应的拦截器  (响应之后做的事情)
request.interceptors.response.use(function (response) {
    // 响应成功的拦截器 
    // ShowSuccess()    // 手机端APP不需要成功的提示 
    
    console.log(response.data)
    if(response.data.code==200){
        ShowSuccess(response.data.msg) 
    }else{
        ShowFail(response.data.msg)
        if(response.data.code==3001){
            // 重定向到 登录  
            router.replace({name:'login'})   // 阻止返回 
        }
    }
    return response;
}, function (error) {
    // 响应失败 
    ShowFail("响应失败 - 未知错误")
    return Promise.reject(error);
});


// 四个函数 增删改查 
export const Get = (url:string,params?:object,headers?:any)=>{
    return new Promise(function(resolve,reject){
        request({
            url,
            method:"GET",
            params:params,  // get请求的传参方式 
            headers:headers,
        }).then(res=>{
            resolve(res.data) // axios 的数据 是包装在 data 里面 
        }).catch(err=>{
            reject(err)
        })
    })
}

export const Post = (url:string,data?:object,params?:object,headers?:any)=>{
    return new Promise(function(resolve,reject){
        request({
            url,
            method:"POST",
            data,  // post 提交的data 
            params:params,  
            headers,
        }).then(res=>{
            resolve(res.data)  
        }).catch(err=>{
            reject(err)
        })
    })
}

// export const Delete = (url,data,headers)=>{
//     return new Promise(function(resolve,reject){
//         request({
//             url,
//             method:"delete",
//             data,  
//             headers,
//         }).then(res=>{
//             resolve(res.data)  
//         }).catch(err=>{
//             reject(err)
//         })
//     })
// }

// export const Patch = (url,data,headers)=>{
//     return new Promise(function(resolve,reject){
//         request({
//             url,
//             method:"patch",
//             data,  
//             headers,
//         }).then(res=>{
//             resolve(res.data)  
//         }).catch(err=>{
//             reject(err)
//         })
//     })
// }